/*
 * @(#)JSONUtil.java
 *
 * Copyright 2012 by ShenY BIS, All rights reserved.
 */

package com.bis.framework.util.string;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.bis.framework.util.common.EntityAnnotation;

/**
 * JSONUtil
 * 
 * @author BIS 2012-12-24
 */
public class JSONUtil
{
    /**
     * getJsonFromObject
     * @Description:
     * @param beanName
     * @param object
     * @return
     */
    public static JSONObject getJsonFromObject(String beanName, Object object)
    {
        //定义一个jsonObject对象
        JSONObject jsonObject = new JSONObject();
        //定义一个jsonFields对象
        JSONObject jsonFields = new JSONObject();
        try
        {
            //取得类对象
            Class<?> ownerClass = object.getClass();
            //取得类的所有属性
            Field[] fields = ownerClass.getDeclaredFields();
            //迭代所有属性
            for (Field field : fields)
            {
                //取得JavaBean的属性标识符对象
                EntityAnnotation fieldAnnotation = field.getAnnotation(EntityAnnotation.class);
                //如果可以转为JSON对象
                if (fieldAnnotation != null && fieldAnnotation.canBeToJSON())
                {
                    //取得属性名称
                    String fieldName = field.getName();
                    //将属性的第一个字母转换为大写字母
                    String firstChar = fieldName.substring(0, 1).toUpperCase();
                    //生成并定义此属性的get方法
                    Method method = ownerClass.getMethod("get" + firstChar + fieldName.substring(1, fieldName.length()));
                    //通过get方法取得相应属性追加到jsonFields中
                    jsonFields.put(field.getName(), method.invoke(object));
                }
            }
            //将jsonFields追加到jsonObject对象中
            jsonObject.put(beanName, jsonFields);
        }
        //捕获异常
        catch (Exception e)
        {
            //异常处理
            e.printStackTrace();
        }
        //返回jsonObject对象
        return jsonObject;
    }

    /**
     * getJsonFromList
     * @Description:
     * @param beanName
     * @param list
     * @return
     */
    public static JSONArray getJsonFromList(String beanName, List<?> list)
    {
        //定义一个JSONArray对象
        JSONArray jsonList = new JSONArray();
        try
        {
            //迭代list列表
            for (Object object : list)
            {
                //将当前对象转换为JSONObject对象
                JSONObject jsonObject = JSONUtil.getJsonFromObject(beanName, object);
                //将转换为jsonObject追加到jsonList中
                jsonList.put(jsonObject);
            }

        }
        //捕获异常
        catch (Exception e)
        {
            //异常处理
            e.printStackTrace();
        }
        //返回jsList对象
        return jsonList;
    }
}
